فصل پنجم: SQL SQL (Structured Query Language) يک زبان مخصوص کار با بانک اطالعات )DSL( است ک ر س SQL زبان را شامل مي شود. انواع داد اي DCL و DML DDL دست دستورات پشتيباني مي شود ک موجب مي شود در طراحي جداول در SQL مختلفي توسط بتوان ستونايي با نوعاي دلخوا تعريف کرد. SQL Server محيطايي مثل SQL انواع داد اي در پشتيباني مي شود بشرح SQL توسط ليستي از ممترين انواع داد اي ک زير است: انواع عددي )522 تا بايتي مثبت 0( 1 : عدد صحيح tinyint )85727 تا بايتي -85723( 5 : عدد صحيح smallint )5147438247 تا بايتي -5147438243( 4 :int عدد صحيح بايتي 3 : عدد صحيح bigint - 1 10^83 تا -10^83 : اعداد حقيقي از decimal رقم 7 بايتي با دقت 4 : اعداد اعشار real رقم 12 بايتي با دقت 3 : اعداد اعشار float انواع کاراکتري ثابت کاراکتر : ذخير با طول 3000 : رشت تا حداکثر char کاراکتر : ذخير با طول متغير 3000 : رشت تا حداکثر varchar کاراکتر: ذخير با طول ثابت و 4000 :nchar رشت تا حداکثر Unicode بصورت کاراکتر: ذخير با طول متغير 4000 : رشت تا حداکثر nvarchar Unicode و بصورت Unicode 1 5147438247 1078741358 انواع ديگر : bit مقادير منطقي 0 و : text متن شامل حداکثر :ntext متن شامل حداکثر کاراکتر کاراکتر: ذخير
:Money نوع پول )با واحد پولي تنظيم شد در سيستم( :DateTime تاريخ )ميالدي( و ساعت )با فرمت نمايشي تنظيم شد در سيستم( : image براي ذخير ر نوع داد با حجم زياد تا 5147438247 بايت مثال براي ذخير يک فايل يا يک عکس در بانک اطالعات دستورات :SQL دستورات SQL بسيار گسترد و متنوعند. برخي از اين دستورات براي کار با ساختاراي کلي ستند و ب داد اي کاربر ربطي ندارند. ب اين نوع دستورات دستورات )Data Definition Language( DDL گفت مي شود. دست ديگري از دستورات دستورات کار با داد ا و موسوم ب Data ( DML Data Control ( DCL ستند. نوع سوم دستورات دستورات )Manipulation Language )Language ستند ک امکان کنترل داد ا در جت جامعيت و جلوگيري از دسترسي اي غير مجاز را فرام مي کنند. کلمات کليدي مورد استفاد در دستورات SQL قبل از معرفي دستورات SQL براي اينک معموال دستورات DDL )کار با اسکيما( و DML )کار با داد ا( بدليل برخي شباتا با م اشتبا گرفت مي شوند ليستي از کلمات کليدي مورد استفاد در اين دو نوع از دستورات )براي عمليات اضاف حذف و تغيير( بصورت زير معرفي مي شود: کار با داد کار با اسکيما Insert Create, Add جديد Delete Drop حذف Update Alter تغيير CREATE TABLE "table_name" ( "column 1 "data_type", "column 2" "data_type",... ) دستورات کار با اسکيما )DDL( تعريف جدول جديد CREATE TABLE Students ( Id int primary key, Name Nvarchar(11) not null, SurName Nvarchar(22) not null, Field Nvarchar(12) ) مثال: دستور ساخت جدول اطالعات دانشجويان:
مثال: دستور ساخت جدول شمار تلفنا: CREATE TABLE TelNums ستون خود افزايشي // Identity, ( Id int TelNum Nvarchar(11), Type Nvarchar(1), SId int, کليد خارجي // مشخص کردن کليد اصلي// (Id), Primary Key برقراري ارتباط بن کليد خارجي با کليد Students(Id) Foreign Key (SId) references اصلي جدول ديگر // ) DROP TABLE "table_name" Drop TABLE Students Alter TABLE "table_name [Drop Add Alter] column از بين بردن يک جدول مثال: از بين بردن جدول دانشجويان: تغيير در اسکيماي يک جدول چند مثال: 1- افزودن يک فيلد جديد Alter TABLE Students Add BirthDate nvarchar(22) تغيير در تعريف يک فيلد Alter TABLE Students Alter column name nvarchar(6) null -2 Alter TABLE Students Drop column Field 3- حذف يک فيلد CREATE Index index_name" ON Table_Name( "column 1, "column 2",... ) تعريف شاخص )index( روي يک جدول اين دستور يک جدول شاخص روي جدول مورد نظر ايجاد مي کند ک مقادير ان جدول بر اساس فيلد يا فيلداي مورد نظر مرتب شد است. CREATE Index SN on Students(sname) CREATE Index SNF on Students(sname, sfmaily) مثال:
شاخص ب سرعت عمليات جستجو کمک مي کند. مثال دستور اول باعث مي شود اگر دانشجويي با يک نام خاص را بخوايم پيدا کنيم با استفاد از شاخص SN سريعا آن را بيابيم. name حذف شاخص: مثال: حذف شاخص ايجاد شد روي ستون DROP Index index_name" از جدول :Students Drop Index SN دستورات کار با داد ا) DML ( Select دستور -1 SQL ممترين و متنوعترين دستور Select دستور ساختار بانک اطالعات است. داد ا از جداول بصورت زير است: است ک کار آن بازيابي کلي يک دستور ساد Select راب ط اسامي فيلدا SELECT جدول شرط WHERE Projection Selection FROM Select Id, Name from S مثال: ليست شمار و نام تمام دانشجويان. مثال: ليست مشخصات تمام دانشجويان رشت اي کامپيوتر و شيمي. Select * from S where Field= Computer or Field= Chemistry ممکن بود در اين مثال بدليل کم توجي ب اشتبا بجاي عملگر or بين دو شرط از and استفاد مي شد. در آن صورت مثل اين است ک بدنبال دانشجويي ستيم ک رشت او م کامپيوتر و م شيمي است! مثال: است. ليست اسامي دانشجويان کامپيوتر ک شمار آنا کمتر از 01112 Select Name from S where Field= Computer and Id<01112 مقادير ممکن بجاي اسامي فيلدا: دستور Select دستوري انعطاف پذير است. در اين دستور غ ير از اسامي فيلداي جدول جايگزيناي ديگري نيز مي توان داشت ک برخي از آنا عبارتند از: 1. يک عدد ثابت:
Select Name, 1 from S Select Name, Id/12 as NewID from S 2. يک فرمول: 3. ترکيب چند فيلد رشت اي: مثال: ليست نام و نام خ دانشجويان. Select Name + + Family as CompleteName from S بررسي خالي بودن يک فيلد اسامي فيلد ا SELECT جدول FROM WHRE فيلد IS NULL راب ط مثال: ليست شمار و رشت دانشجوياني ک رشت آنا وارد شد است. Select Id,Field from S where not field Is NUll مثال: است. =NULL ليست شمار دانشجوياني ک ن رشت و ن نام خ آنا وارد نشد
Select Id from S where Family Is Null and Field Is Null عملگر : Order By براي مرتب کردن تاپلاي خروجي بر اساس ستون يا ستوناي مورد نظر مي توان از عملگر Order By استفاد کرد. راب ط SELECT اسامي فيلد ا FROM جدول شرط WHERE نام يا انديس فيلدا ORDER BY [desc asc] نزولي صعودي مثال: ليست شمار و نام خ تمام دانشجويان مرتب شد براساس شمار بطور صعودي Select Id, family from S order by Id مثال: ليست مشخصات تمام دانشجويان مرتب بر اساس نام خ و سپس نام. Select * from S order by family, name ليست اسامي دانشجويان کامپيوتر بترتيب نزولي شمار آنا Select Name from S where Field ='Computer' order by 0 desc مثال: عملگر Between اين عملگر براي بررسي اينک مقدار يک ستون در يک باز )بين دو مقدار خاص( است يا ن بکار مي رود و براي نوعاي عددي و تاريخ قابل استفاد است. الزم بذکر است ک خود دو مقدار ابتدا و انتاي باز م در شرط در نظر گرفت مي شوند. راب ط تمام ليست نام خ مثال: شمار آنا دانشجويان ک است. Select Id, Name form S where Id >=34110 and Id <=34150 يا و 01122 01112 بين
Select Id, Name form S where Id between 344110 and 34150 Like عملگر ک ن است براي يافتن مقاديري است و براي مقادير رشت اي Like عملگر منظور از الزاما دقيقا يکسان بلک مشاب کلم مورد نظر باشند. باشد. کلم جزئي از آن جستجو مشاب بودن اين است ک کلم مورد قابليتاي اين عملگر و نحو استفاد از آن با چند مثال روي جدول زير نشان داد مي شود. راب ط دانشجوياني ک ليست مثال: شروع مي شود. Select * from S where name like 'A%' A نام آنا با تمام مي شود. i ليست دانشجوياني ک نام خ آنا با مثال: Select * from S where name Like '%i' وجود دارد. a يا A مثال: ليست دانشجوياني ک در نام آنا حرف Select * from S where name Like '%A%' or name Like '%a%' عمل = معادل Like را فراموش کنيم عملگر % اگر عالمت نکت: مي کند. مثال: ليست مشخصات تمام دانشجويان رشت کامپيوتر ک نام آنا 3 حرفي و حرف مياني آن l است. Select * from S where Field= Computer and name Like _l_ مثال: ليست مشخصات تمام دانشجويان ک نام آنا با A شروع و ب i ختم مي شود. Select * from S where name Like A%i مثال: ليست اسامي دانشجوياني ک حرف دوم و چارم نام آنا a و s است. Select name from S where name like _a_s% اگر شامل رکورداي تکراري باشد. Select بازيابي رکورداي تکراري گاي ممکن است خروجي يک دستور استفاد تکراري بازيابي شود بايد از عملگرDISTINCT نخوايم رکورد اگر عمل مي کند. DISTINCT برعکس است ک ALL ديگر عملگر کنيم. در نظر گرفت مي ALL نوشت نشود بطور پيش فرض از آنا يچکدام شود. اسامي ] ALL SELECT [ DISTINCT فيلدا جدول FROM
راب ط تمام رشت اي Select Distinct Field from S Select all Name, Family from S Select Name, Family from S مثال: ليستي از دانشگا. مثال: ليست نام و نام خ تمام دانشجويان. يا عملگر UNION و UNION ALL عملگر Union اجتماع رکورداي دو جدول را برمي گرداند. مطابق اجتماع مجموع ا رکورداي تکراري در صورت وجود تنا يکبار در خروجي مي آيند. اما اگر مايل باشيم رکورداي تکراري حذف نشوند مي توانيم از عملگر Union All استفاد کنيم. راب ط مثال: ليستي از نام خ تمام اساتيد و دانشجويان. راب ط Select Family from S UNION Select Family From T Select Family from S UNION ALL Select Family From T دستور اول دقيقا اجتماع است يعني رکورد اي تکراري يکبار در خروجي مي آيند. اما در دومي تکرار مي شوند. مثال: ليست مشخصات تمام دانشجويان رشت اي کامپيوترو شيمي. Select * from S where Field= Computer UNION Select * from S where Field= Chemistry عملگر IN عضويت يک مقدار را در يک مجموع بررسي مي کند. راب ط )جدول نمرات( راب ط راب ط
حالت اول( مجموع ثابت و مشخص است. مثال: شيمي. ليست مشخصات تمام دانشجويان رشت اي کامپيوتر رياضي و Select * from S where Field IN ( Computer, Math, Chemistry ) حالت دوم( مجموع ثابت و مشخص نيست. Query( )Nested مثال: )بايد ليست مشخصات تمام دانشجويان ک تاکنون درس گرفت اند. Id آنا عضو مجموع SId اي موجود در STC باشد( Select * from S where Id IN (SELECT Sid form STC) SELECT * from S where Id IN ( select * from STC) مجموع اي مجود در STC SID STC يک مثال ديگر مثال: ليست مشخصات دانشجو ياني ک تاکنون درس راب ط )جدول نمرات( راب ط ک درس راب ط 3 واحدي 3 واحدي نگرفت اند. )بايد Id آنا عضو مجموع SId اي موجود در گرفتند نباشد( SELECT * from S where Id NOT IN (SELECT Sid from STC where CID IN (SELECT Cid from c where Units=8) ) S P SP s# S1 S5 SName Status 80 80 City تران تبريز فن آوران پوالدين P# P1 P5 P8 PName AA BB CC Color Red Green Red Weight 10 50 12 City تران شيراز تران S# S1 S1 S5 S5 P# P1 P5 P5 P8 Qty 800 500 400 100
p2 را توليد کرد اند. اي موجود در SP ک #P ليست تي کنندگاني ک قطع مثال: #S عضو مجموع آنا #s )بايد است باشد( P2 آنا SELECT * from S where S# IN (SELECT S# from SP Where P# = 2 ) 'IN' بجاي '=' استفاد از را گرفت اند. OS مثال: شمار دانشجوياني ک درس براي پاسخ ب اين سوال مي توان نوشت: SELECT SId from STC Where CId IN (SELECT CId from C Where CName= OS ) داريم مي C در جدول OS اما اگر مطمئن باشيم ک تنا يک درس بنام توان نوشت: SELECT SId from STC Where CId = (SELECT CId from C Where CName= OS ) دستور فوق تنا در صورتي بدرستي اجرا مي شود ک حاصل دستور داخل يک مقدار باشد. در غير اينصورت در کامپايل دستور مشکلي پرانتز تنا ايجاد نمي شود اما خطاي زمان اجرا رخ مي دد. ALL عملگراي Any و All استفاد از عملگراي ANY مثال نشان داد مي شود: )حداقل يکي( و )م( در شرطا با چند مثال:ليست تي کنندگاني ک وضعيت آنا عددي فرد بين 20 تا 31 است. Select * from S Where status= 22 or status = 31 or status=33 يا Select * from S Where status = ANY (22, 31, 33) مثال: مثال: نام قطعاتي ک وزن آنا بين تمام قطعات مينيمم نباشد. Select * from P Where weight > ANY (Select weight from P) نام قطعاتي ک وزن آنا بين تمام قطعات مينيمم باشد. Select * from P Where weight <= All (Select weight from P) 'IN(,, )' نکت: شرط )', ANY(, '= معادل است با شرط Exists عملگر داخل select است. اگر نتيج false يا true مقدارش ) from Exists (Select * شرط مي شود. false وگرن true حاصل پرانتز رکوردي داشت باشد کاربرد اصلي: يک رکورد از يک جدول با اين شرط انتخاب مي شوند ک در جدول ديگري رکوردي موجود باشد ک با اين رکورد ارتباط داشت باشد. بنابراين بازاي ر رکورد از جدول اول يکبار تمام رکورداي جدول دوم بررسي مي شود. نيز قابل جواب است اما Exists جواب داد شود با In ر پرس و جو ک با برعکسش صحيح نيست.
مثال: ليست تمام دانشجوياني ک تاکنون درس گرفت اند. روش اول: Select * from S where SId IN (Select SId from STC) روش دوم: Select * from S Where Exists (Select * from STC where STC.SId = S.SId) m شامل STC تاپل و n شامل S مقايس دو را حل )با اين فرض ک جدول تاپل باشد(: در روش اول ابتدا دستور داخل پرانتز اجرا مي شود و مجموع شمار استخراج شد و جايگزين STC دانشجوياني ک درس گرفت اند از جدول اصلي اجرا مي شود و ر دانشجويي ک شمار Select پرانتز مي شود. سپس STC تاپل و n شامل S اش جزء مجموع باشد انتخاب مي شود. پس اگر جدول تاپل باشد چون تاپلاي ر کدام از اين دو جدول تنا يکبار m شامل است. O(m+n) خواند مي شود مرتب اجرايي بازيابي اطالعات در روش اول S( اصلي )خواندن تاپلاي Select دوم کار با دستور اما در روش ک خواند مي شود ب اين شرط انتخاب S آغاز مي شود. ر رکوردي از رکوردي مرتبط با آن وجود داشت باشد. پس STC مي شود ک در جدول بار خواند مي شوند )n STC S يکبار کل رکورداي بازاي ر رکورد از پرانتز اجرا مي شود(. بنابراين مرتب اجرايي در اين دستور داخل مي شود. O(m.n) حالت سريعتر است و در موارد ممکن بتر است Exists از IN نتيج اينک عملگر استفاد کرد. IN از Exists بجاي مثال: ليست توليدکنندگان قطع P5 )با استفاد از عملگر )Exists را حل: از جدول S ر رکوردي ک شرط زير را داشت باشد انتخاب کن: در جدول SP رکوردي موجود باشد ک #S آن برابر با #S رکورد ما بود و #P آن برابر P5 باشد Select * from S Where Exists(Select * from SP Where S# = S.S# and P# = P2) :Unique عملگر است با اين تفاوت ک خروجي عملگر Exists مشاب Unique کاربرد عملگر است ک حاصل دستور داخل پرانتز دقيقا يک رکورد true در صورتي Unique باشد. يک نمون توليد کرد اند. Select * from S Where P5 قطع کنندگاني ک از Unique (Select * from SP Where S# = S.S# and P# = P2) مثال: ليست تي پيوندا در SQL
با توج ب اينک با مفوم انواع پيوندا در بخش جبر اي آشنا را با SQL شد ايد بدون توضيح اضافي نحو نوشتن انواع پيوندا در مثال نشان مي ديم. ضرب دکارتي راب ط )جدول نمرات( راب ط مثال : Select * from S, STC يا Select * from S Cross Join STC در اين نوع پيوند م رکوردا از دو جدول با م ترکيب ک مي دانيم S STC شامل رکورداي بي معني خواد مي شوند. بنابراين حاصل ضرب بود. پس عمال کاربرد چنداني ندارد. پيوند شرطي و طبيعي راب ط )جدول نمرات( راب ط روش اول: Select * from S, STC where S.ID = STC.SId شرط اصلي پيوند: برابري مقدار فيلد اي مرتبط با م Select * from S Join STC On S.Id = STC.SId روش دوم: در اين نوع پيوند رکوردايي از دو جدول با م ترکيب مي شوند ک منطقا بم ربط دارند. کار دو روش پيوند نوشت شد يکي است اما دستور دوم بين تر است. شرطي ک بجاي Whereجلوي ON نوشت مي شود شرط پيوند است يعني در نگام پيوند کنترل مي شود ن بعد از پيوند. معادل دو دستور فوق در جبر اي بترتيب بصورت زير است: دستور اول:
σ S.Id=STC.SId (S STC) دستور دوم: S STC S.Id=STC.SId مثال: راب ط نکت: براي پاسخ ب پرس و جوايي ک ب بيش از يک جدول نياز دارند از دو روش مي توان استفاد کرد: Join )5 Nested Query )1 مثال: بازيابي ليست دانشجوياني ک تاکنون درس گرفت اند. 1. SELECT S.* FROM S WHERE Id IN (SELECT Sid FROM STC) 5. SELECT S.* FROM S, STC WHERE S.Id = STC.SId نکت: استفاد از پيوند سبب سرعت باالتر مي شود اما استفاد از پرس و جواي تودرتو خوانايي بيشتري دارد. چند مثال: )جدول نمرات( ليست دانشجويان بمرا نمرات آنا. Select S.*, mark from S, STC Where S.Id = STC.Sid مثال: مثال: ليست دانشجويان بمرا مشخصات دروس اخذ شد و اساتيد مربوط و نمرات آنا. Select * from S, C, T, STC Where STC.Sid = S.Id AND STC.Cid = C.Id AND STC.Tid = T.Id
مشخص است ک براي پاسخ ب پرس و جوايي ک نياز ب پيوند چند جدول نوشت و شرطاي Select داريم کافي است اسامي آن جدولا را در دستور اصلي پيوند )برابري ستوناي مرتبط( ذکر شوند. مثال: ليست تمام دانشجوياني ک درس OS را گذراند اند. 1) Select S.* from S, C, STC Where S.Id = STC.Sid AND C.Id = STC.Cid AND CName = OS 5) Select S.* from S Join STC ON S.Id = STC.Sid Join C ON C.Id = STC.Cid Where CName = OS DB دانشجوي افتاد دارند. Select T.* from C, T, STC Where STC.Cid = C.Id AND STC.Tid = T.Id AND Cname = DB AND mark < 10 مثال: ليست اساتيدي ک در درس چند مثال: مثال: ليست شمار دانشجويي تمام جفت دانشجوياني ک نام و نام خ يکسان دارند. نکت: زماني ک نياز داريم ک براي يک پرس و جو از پيوند يک جدول با خودش استفاد کنيم بايد 5 کپي از آن در حافظ ايجاد کنيم. ب اين عمل Aliasing )نام مستعار( گفت مي شود. راب ط راب ط Select First.Id, Second.Id From S First, S Second Where First.Name = Second.Name AND First.Family = Second.Family AND First.Id < Second.Id اگر شرط آخر فراموش شود چند مشکل بوجود مي آيد. اول اينک ر تاپل با خودش م پيوند مي خورد. دوم اينک عالو بر اينک مثال تاپل اول از جدول اول با تاپل سوم از جدول دوم )بدليل يکسان بودن نام دانشجو( پيوند مي خورند تاپل سوم از جدول اول با تاپل اول از جدول دوم م پيوند مي خورند ک در واقع يک پيوند تکراري انجام شد است. فراپيوند
)جدول نمرات( مثال: ليست تمام دانشجويان بمرا نمرات آنا. اگر دانشجويي درسي نگرفت باز در ليست باشد. Select * from S Left Outer Join STC On S.Id = STC.Sid توابع ستوني )آماري( توابع عملي را روي يک ستون از جدول انجام مي دند اين عدد مي شود. :SUM مجموع مقادير يک ستون از نوع عددي : ميانگين مقادير يک ستون از نوع عددي AVG : مينيموم مقادير يک ستون از نوع عددي Min : ماکزيموم مقادير يک ستون از نوع عددي Max يک ستون )تعداد رکوردا( : تعداد عناصر Count يا Count(FieldName) o : تعداد رکوردا Count(*) o و حاصل يک چند مثال: )جدول نمرات( تعداد دانشجويان رشت کامپيوتر Select Count (Sid) as Tedad from S Where Field = Computer يا Select Count (*) as Tedad from S Where Field = Computer مثال: مثال: تعداد دانشجوياني ک تاکنون نمر کمتر از 10 دارند. Select Count (Distinct Sid) as Tedad from STC Where mark < 10 استفاد از کلم کليدي Distinct در داخل تابع Count موجب مي شود مقادير تکراري تنا يکبار شمارش شوند. مثال: ماکزيموم و مينيموم نمر بين دانشجويان رشت کامپيوتر
Select Max(mark) as mx, Min(mark) as mn from S,STC Where S.Sid = STC.Sid AND Field = Computer چند مثال: )جدول نمرات( مثال: تعداد اساتيدي ک تاکنون درس OS را ارائ کرد اند. Select Count (Distinct tid) as Tedad from C,STC Where C.CId = STC.CId AND Cname = OS چند مثال: )جدول نمرات( OS مثال: تعداد اساتيدي ک تاکنون درس را ارائ نکرد اند. Select Count (tid) from T Where tid NOT IN (Select tid from C,STC Where C.CId = STC.CId AND Cname = OS ) مثال: شمار دانشجوياني ک نمر اي باالتر از ميانگين تمام نمرات دارند. Select SId from STC
Where mark > ( Select Avg(mark) from STC) ) يك عدد است Select SId from STC Where mark > Avg(mark) دستور دوم اشتبا است. ب اين دليل ک دستور مستقلي براي محاسب ميانگين در ابتدا وجود ندارد. پس ر رکورد را ک مي خواند ميانگين کل از قبل محاسب نشد تا مقدار نمر اين رکورد با آن مقايس شود. بنابراين مقدار نمر ر رکورد با ميانگين نمرات از ابتداي جدول تا اينجا مقايس مي شود )ن ميانگين کل نمرات(. پس اين دستور منجر ب خطاي منطقي مي شود. مثال: مشخصات دارند. دانشجوياني ک نمر اي باالتر از ميانگين تمام نمرات (دستور باال) Select * from S where SId in ا : جداول مجازي View عالو بر جداول اصلي )Table( نوع ديگري از جداول بنام جداول مجازي Tableا )ک واقعا روي ديسک ا برخالف View )View( وجود دارند. بظار و از نظر کاربردي کاربران براي ندارند. ستند( وجود خارجي ا مانند جدولا ستند پس مي توانيم: View آنا را باز کرد و داد اي آنا را ببينيم. بر روي آنا عمليات جبر اي را انجام ديم مثال يک پيوند بنويسيم يا آن را با يک جدول View روي يک Select دستور ديم. View ساخت يک ک جدول حاصل آن براي ما زياد مورد استفاد Select رگا يک دستور ذخير کنيم تا در مواقع لزوم از View است ميتوانيم آن را بصورت يک آن استفاد کنيم. است Select داد ا ذخير نمي شوند. بلک خود دستور View نگام ذخير ک ذخير مي شود. خود سيستم سريعا دستور مربوط ب آن را اجرا View يک نگام رجوع ب را ب ما نشان مي دد بطوريک بنظر مي رسد اين Select کرد و حاصل ذخير شد اند. View داد ا در داخل CREATE View viewname as Select. دستور ساخت يک :View بعنوان مثال براي بسياري از پرس و جوا نياز داريم 4 تعدادي از آنا را پيوند طبيعي ديم( و بناچار Query مي شود. جدول فوق )يا اي ما طوالني
)جدول نمرات( کافي است حاصل پيوند طبيعي 4 جدول را بصورت يک View نگام لزوم از آن استفاد کنيم: ذخير و در Create View WholeData as Select * From S,C,T,STC Where S.Id=STC.Sid AND C.Id=STC.CId AND T.Id= STC.tId را تاکنون تدريس کرد اند. Select tname from WholeData Where cname = OS OS مثال: نام اساتيدي ک درس
ويرايش داد اي يک View ا ويرايش کرد. اما در واقع table ا را مي توان مانند view داد اي ويرايش مي شود. view جدول پاي شرايط خاصي داشت باشد. view درج و ويرايش در صورتي قابل اجراست ک از جمل: فقط از روي يک جدول ساخت شد باشد م باشد. view کليد جدول در استفاد نشد باشد. select distinct در تعريف آن از زير نمي توان رکورد جديدي درج کرد. چون درج در جدول view در مثال: بگيرد. null نمي تواند مقدار #S اصلي )S( انجام مي شود و -Create view view1 as Select name, city from S -('Ali', 'Shiraz') view1
Stored procedure دستور يا دنبال اي از دستورات SQL را مي توانيم بصورت يک Procedure در DB ذخير کنيم تا در زمان نياز در برنام اي کاربردي بتوانيم آن را صدا بزنيم.
ر پروسيجر يک نام و ميتواند تعدادي پارامتر داشت باشد. مچنين داخل بدن آن مي توان متغيراي مورد نياز را تعريف کرد. CREATE Procedure SPname @param1 type1, @param2 type2, as بدن پروسيجر دستور ساخت يک :SP يک مثال: sp براي عمل جستجو
تست )نرم افزار دولتي 06( دستور SQL گرداند زير در بانک اطالعاتی توليد کنندگان و قطعات چ بر می Select S.SNAME From S Where S.S# IN (Select SP.S# From SP Where SP.P# ='P2';) را توليد می کنند ( ' P2 ' 1( اسامی توليد کنندگانی ک قطع شمار احتماأل با تکرار( را توليد می کنند ' P2 ' 2( اسامی توليد کنندگانی ک قطع شمار )بدون تکرار( را توليد می ' P2 ' 3( اسامی توليد کنندگانی ک فقط قطع شمار کنند. قطع ' P2 ' اسامی توليد کنندگانی ک عالو بر قطع شمار 1( ديگری نيز توليد می کنند. گزين :... تست )نرم افزار دولتي 01( کدام يک از عبارات SQL زير با بقي عبارات معادل نمی باشد Select P.* ) 1 from part P where P.P# IN(select SP.P# from supply SP where SP.charge >40000) Select P.* from part P where P.P# = ALL(select S.P# from supply S where S.charge >40000) Select P.* from part P where Exists (select * from supply SP where P.P# =SP.P# and SP.charge >40000) Select P.* from part P )5 )8 )4
where P.P# =(select SP.P# from supply SP where P.P#=SP.P# and SP.charge >40000) گزين :... تست )نرم افزار دولتي 08( نتيج دستور SQL زير چيست SELECT P.* FROM S,P,SP WHERE S.CITY='LONDON' AND S.S# =SP.S# AND P.P# =SP.P# 1( دستور دارای خطای نحوی است. 5( کلي مشخصات قطعاتی ک توسط تمام توليد کنندگان لندن توليد می شود. 8( کلي مشخصات قطعاتی ک حداقل توسط يکی از توليد کنندگان لندن توليد می شود. 4( کلي مشخصات قطعاتی ک دقيقأ توسط يکی از توليد کنندگان لندن توليد می شود. گزين :... کدام گزين در مورد دستور زير صحيح است SELECT * FROM Students WHERE SId = (SELECT SId FROM students) 1( دستور صحيح است 2( دستور خطاي زمان ترجم دارد 3( دستور خطاي زمان اجرا دارد 1( دستور ممکن است خطاي زمان اجرا داشت يا نداشت باشد گزين :... اگر دستور داخل پرانتز يک مقدار برگرداند دستور اجرا مي توضيح: است. شود. اما اگر تعدادي رکورد برگرداند مقايس با = بي معني کدام گزين در مورد دستور زير صحيح است SELECT s# FROM S WHERE city = (SELECT city FROM S Where s# = S1) S1 1. شمار تي کنندگان مشري تي کنند S1 و شمار خود S1 2. شمار تي کنندگان مشري تي کنند اصال مجاز نيست SQL 3. اين طرز نوشتن در 1. دستور ممکن است خطاي زمان اجرا داشت يا نداشت باشد گزين :... توضيح: چون مطمئنا دستور داخل پرانتز فقط يک مقدار برمي گرداند دستور بدرستي اجرا مي شود. کدام دستور معادل دستورات زير است
Create view V as SELECT * FROM S where city = London Select Name from V where s# in (Select s# from SP WHERE Qty > 1222) 1. Select Name from S,SP where S.S# = SP.S# AND city = London And Qty>4000 5. Select Name from S join SP on S.S# = SP.S# where city = London And Qty>4000 8. Select Name from S where S# in ( select S# from SP Where Qty>4000) AND city = London م موارد.4 گزين :... کردن از حاصل يک Select راب ط Select دستور Select يک مي دانيم ک حاصل جدول است. پس مي توان از آن مجددا اطالعاتي راselect کرد. اين کار ب دو روش قابل انجام است: Select view select روش اول( View ذخير نتيج اول در قالب يک و بعد کردن از Create view tmp as Select * from S Where Field= Computer Select Id from tmp where name like A% view روش دوم( مستقيم و بدون استفاد از Select Id from ( select * from S where Field = 'Computer') tmp where Tmp.name like 'A%' نام جدول حاصل را tmp مي گذارد (Aliasing) زماني ک با دستور پيچيد اي مواج ستيم مي توانيم آنرا ب اين را اعمال Select روش ب دستورات ساد تر بشکنيم يعني طي چند مرحل کنيم.
فقط n Select رکورد اول را نشان Select TOP(n) زماني ک بخوايم از ليست حاصل از دد. مثال: 12 ليست نفر اول ليست دانشجويان Select Top(12) * from S نفر اول ليست دانشجويان کامپيوتر Select Top(12) * from S Where Field = Computer 12 ليست مثال: نفر اول از ليست دانشجوياني ک تاکنون درس نگرفت 12 ليست مثال: اند. Select Top(12) * from S where Sid Not in (Select Sid from STC) ام( از ليست دانشجويان. 32 تا نفر سوم )21 12 ليست مثال: شمار اول ليست نيست( 22 آنا جزء Id نفري ک 12 )يعني اولين Select Top(12) * from S where Sid Not in (Select Top(50) Sid from S) 22 شمار اول ليست عملگر Group By زماني کاربرد دارد ک بخوايم رکوردا را بر اساس مقدار يک يا چند فيلد گروبندي کنيم. بعد از اعمال اين عملگر رکورد اي جدول حاصل ر يک نمايند يک گرو از رکوردا ستند. بيشتر اوقات زماني استفاد مي شود ک بخوايم توابع ستوني )آماري( را روي دست اي رکوردا بصورت مجزا اعمال کنيم. فقط عملگر Order By مي تواند بعد از Group By بيايد. راب ط راب ط بمرا ميانگين نمرات او. دانشجو ر ليست شمار دانشجويي مثال: روي کل رکوردا بايد بصورت زيرعمل Avg در اين مثال بجاي اعمال تابع شود:
ر ركورد در واقع نمايند يك گرو از ركوردا است Select SId,Avg(mark) as average from STC Group By Sid سوال: آيا در مثال قبل مي توانستيم دستور زير را بنويسيم Select SId,term,Avg(Mark) from STC Group By SId پاسخ: خير چون گروبندي فقط بر اساس شمار دانشجويي انجام شد ميانگين بدست آمد بين نمرات مربوط ب ترماي مختلف است. پس ترم مشخصي وجود ندارد ک آنرا در رکورد نمايند گرو قرار ديم. سوال: دستور زير را چگون بنويسيم Select SId,term,Avg(Mark) from STC Group By SId پاسخ: دف از اين دستور ظارا اين است ک شمار دانشجو و معدل او در ر ترم جداگان نشان داد شود. بنابراين بايد گروبندي رکوردا را بر اساس فيلداي )ش دانشجويي و ترم( انجام ديم )ن فقط ش دانشجويي( تا معدل ر دانشجو در ر ترم مجزا حساب شود: Select SId,term,Avg(Mark) from STC Group By SId, term نتيج مم: تنا فيلدايي را مي توانيم select کنيم ک جلوي Group By آمد باشند. اما اجباري نيست ر فيلدي ک در Group by آمد حتما جلوي Select م بيايد. چند مثال: )جدول نمرات(
مثال: شمار تمام دروس ب مرا ماکزيموم نمر اي ک در تاکنون گرفت شد است. درس ر Select CId, Max(mark) from STC Group By CId چند مثال: مثال: مشخصات ريک از اساتيد بترتيب الفباي نام خ بمرا تعداد دانشجوياني ک ر استاد در ر درس داشت است. )جدول نمرات( Select tid, tname, tfamily, Count(SId) from T, STC Where T.tId = STC.tId Group By tid, tname, tfamily, CId Order by tfamily :Having اعمال شرط روي گروا مانطور ک ديديد Group By رکوردا را دست بندي مي کند و در جدول حاصل ر رکورد در واقع يک گرو است. براي اينک شرط بگذاريم ک چ گروايي در نايت نمايش داد شوند بجاي Where از Having استفاد مي کنيم. مثال: بازيابي شمار دانشجويي و ميانگين نمرات دانشجويانيک ميانگين نمرات آنا کمتر از 11 است. Select SId,Avg(Mark) from STC Group By Sid Having Avg(Mark)<11 نوشت مي شد الزم بود ر رکورد Where در اين مثال Having اگر بجاي داشت باشد تا شرط براي آن چک شود ک اينطور Avg(mark) ستوني بنام نيست. مثال: بازيابي شمار دانشجويي و ميانگين نمرات دانشجويانيک تا
کنون 8 تا از دروس را گرفت اند. Select SId,Avg(Mark) from STC Group By Sid Having Count(distinct CId)>1 مثال: شمار ريک از اساتيد ک نام خ آنا با H شروع مي شود و داشت اند بمرا تعداد دانشجوياني ک ر )جدول تاکنون بيش از يک دانشجو نمرات( استاد داشت است. distinct Sid ) from T, STC Where T.tId = STC.tId and tname like A% Group By tid Having Count(distinct SId) > 1 شرط اول ب where مربوط مي شود و شرط having Select ب tid, دوم Count( چند مثال: )جدول نمرات( مثال: شمار تمام دانشجوياني ک تاکنون 8 تا از دروس را گرفت اند. Select SId from STC Group By SId Having Count(distinct CId) = 8 پرس و جواي داراي شرط 'م': در جبر اي اينگون پرس و جوا را با عملگر تقسيم پاسخ مي ديم. اما در SQL عملگر تقسيم نداريم. بجاي آن س روش براي پاسخگويي ب اين نوع پرس و جوا وجود دارد. روش اول پاسخ ب پرس و جواي داراي م )بجاي عملگر تقسيم( مثال: شمار تمام دانشجوياني ک تاکنون م دروس را گرفت اند. با الگوبرداري از مثال قبل:
Select Sid from STC Group By Sid Having Count(distinct Cid) = ( select Count (CId) from C) يك عدد است در SQL عملگر تقسيم نداريم.پس ب عمل مي كنيم. اين روش روش دوم پاسخ ب پرس و جواي داراي م )جدول نمرات( مثال: شمار تمام دانشجوياني ک تاکنون م دروس را گرفت اند. جواب: ر دانشجويي ک بازاي آن دانشجو درسي وجود نداشت باشد ک بمرا آن دانشجو در جدول STC نيامد باشد. Select SId from S Where Not Exists (Select * from C Where Not Exists (Select * from STC where S.Id = Stc.Sid And C.Id = STC.CId)) چند مثال پيشرفت تر از Select اي تودرتو: مثال: ليست کد ريک از اساتيد بمرا ماکزيموم تعداد دانشجوياني ک آن استاد تاکنون در يک ترم داشت است. تفاوت اين مثال با مثالاي قبل اين است ک بدنبال محاسب تابع ماکزيموم روي مقادير يک ستون جدول نيستيم. بلک بايستي ابتدا تعداد دانشجويان ر استاد در ر ترم محاسب شود و در يک جدول موقتي )مثال )tmp قرار گيرد. سپس ماکزيموم اين تعدادا براي ر استاد محاسب
شود. چنين پرس و جوايي در دو مرحل و بصورت زير پاسخ داد مي شوند. Select tid, Max(cnt) from (Select tid, term, Count(SId) as cnt from STC Group by tid, term) tmp group by tid مثال: ليست شمار تمام دانشجوياني ک تاکنون 8 ترم مشروط شد اند. )يعني معدل آنا در 8 تا از ترما کمتر از 15 شد است( Select Sid from (Select Sid, term, Avg(mark) as average from STC Group by Sid, term Having Avg(mark)<12) tmp Group by Sid Having Count(average)=3 تست )دولتي 01( دربانک زير کدام گزين پاسخ پرس و جوی " نام ملوان ائی ک م قايق ا را رزرو کرد اند " می باشد age) Sailor (sid, sname, rating, ملوان color) Boats (bid, bname, قايق day) Reserves (sid, bid, رزرو Select S.name from sailor S where nor exists((select B.bid from Boats B) EXCEPT )1 (Select R.bid from Reserves R) AND S.sid = R.sid) Select S.sname from sailor S where not exists ( Select B.bid from Boats B where not exists ( )5 Select R.bid from Reserves R where R.bid = Bbid and R.sid=S.sid)) 8( موارد 1 و 5 4( يچکدام گزين :... 01( تست )دولتي زير کدام يک از گزين ا صحيح است SQL در مورد عبارات Melli" select avg(balance) from account where branch-name = " الف: select branch-name, avg (balance) from account group by branch-name ب: having avg(balance) > 1500 select branch-name from branch where assets > ANY (select assets from branch ج: where branch-city = 'ISFAHAN') 1( فقط عبارت )الف( صحيح می باشد. 5( فقط عبارات )الف( و )ب( صحيح می باشد. 8( رس مورد صحيح می باشد.
4( الاقل يکی از عبارات )الف( و )ب( و )ج( و غلط می باشد. گزين :... تست )دولتي 06( در آناليز ای فرص کنيد : Range of SX is S Range of PX is P Range of SPX is SP آنگا عبارات زير چ چيزی بر می گرداند 1( اسامی توليد کنندگانی ک م قطعات را توليد می کنند. 5( اسامی توليد کنندگانی ک يچ قطع ای را توليد نمی کنند. 8( اسامی توليد کنندگانی ک حداقل يک قطع را توليد می کنند. 4( اسامی توليد کنندگانی ک حداقل يک قطع را توليد نمی کنند. گزين 1 صحيح است. کدام گزين شمار قطعاتي را مي دد ک توسط بعضي از توليدکنندگان )ن م( توليد نشد اند 1. Select P# from P where P# Not In (Select P# from SP) 5. Select P# from P Where Not Exists (Select S# from S Where Not Exists (Select * from SP where S.S# = SP.S# AND P.P# = SP.P#)) 8. Select P# from P Where Not Exists (Select S# from S Where Exists (Select * from SP where S.S# = SP.S# AND P.P# = SP.P#)) 4. Select P# from P Where Exists (Select S# from S Where Not Exists (Select * from SP where S.S# = SP.S# AND P.P# = SP.P#)) گزين 4 صحيح است. قطع اي بايد انتخاب شود ک تي کنند اي در جدول S وجود داشت باشد ک اين تي کنند و آن قطع در کنار م در جدول SP وجود نداشت باشند. دستور زير چ کار مي کند Select S# from SP Group By S# Having Sum(Qty) <= Count(Qty) 1( تي کنندگاني ک کمترين تعداد توليد را دارند 5( تي کنندگاني ک از ر قطع فقط يک نمون توليد کرد اند 8( تي کنندگاني ک از ر قطع بيش از يک نمون توليد کرد اند 4( خروجي مشخصي ندارد. گزين 5 صحيح است. دستور Insert کار اين دستور درج يک رکورد جديد در جدول يک است.
), مقدار 2, مقدار 1 values(, ) فيلد 2, فيلد 1 ( نام جدول Insert into S Id Name Family Field 01448 01448 01448 Ali Reza Hassan Ahmadi Rezaei Hasani Computer Math Chemistry Insert into s (Id, Name, Family, Field) Values ( '01112', 'Hadi','Karimi',Math') S Id Name Family Field 01448 01448 01448 04148 Ali Reza Hassan Hadi Ahmadi Rezaei Hasani Karimi Computer Math Chemistry Math زماني ک بخوايم در تمام فيلدا مقدار وارد کنيم ذکر نام فيلدا ضرورتي ندارد پس: ), مقدار 5, مقدار 1 values( نام جدول Insert into مثال: Insert into S Values ( 34140, Karim, Karimi, Math ) اما اگر فقط ب تعدادي از فيلدا بخوايم مقدار ديم ذکر نام آن فيلدا الزم است: Insert into S (Id, Name, Family) Values ( 34140, Karim, Karimi ) براي جداولي ک کليد Auto Increment دارند نگام درج مجبوريم نام فيلدا را ذکر کنيم چون ب فيلد کليد نمي توانيم مقدار ديم. راب ط
Insert into STC (Sid, Cid, Tid, Mark) values( 34150, 108, 8, 18) تست )دولتي 08( با اجرای دستور زير روی بانک اطالعاتی توليد کنندگان قطعات: INSERT INTO S ( S#, SNAME, CITY ) VALUES ( 'S10', 'SMITH', 'NEW YORK'); SQL کدام يک از گزار ای زير صحيح است 1( دستور با خطای اجرا مواج می شود. 5( دستور با خطای ترجم مواج می شود. 8( اعتبار )STATUS( توليد کنندگان Smith 4( اعتبار )STATUS( توليد کنندگان Smith کند. گزين :... مقدار NULL خواد شد. مقدار قبلی خود را حفظ می در يک جدول Select درج رکورداي حاصل از يک بجاي مجموع ثابتي از مقادير مي توانيم مجموع مقادير حاصل از يک را در يک جدول درج کنيم. (دستور values (select (فيلدا) نام جدول Insert into Select دستور مثال: کنيد. شمار نام و نام خ اساتيد را در جدول دانشجويان نيز درج Insert into S (Sid, SName, Sfamily) values (Select TId,Tname,Tfamily from T) راب ط
دستور Update کار اين دستور تغيير مقادير رکوردا است: شرط Where تغييرات set نام جدول Update تغييرات روي تمام رکوردايي ک شرط را دارند اعمال مي شود. Software مثال: دستوري ک عنوان رشت دانشجويان رشت Computer تغيير دد. را ب S Id Name Family Field 01448 Ali Ahmadi Computer 01448 Reza Rezaei Math 01448 Hassan Hasani Chemistry Update S Set field = software Where field = computer چند مثال: )جدول نمرات( و رشت او را ب Reza را ب 32110 نام دانشجويي با شمار مثال: تبديل کنيد. software Update S Set Sname = Reza, field = software Where Sid = 32110 تبديل 4 تعداد واحد دروسي را ک تاکنون اخذ نشد اند ب مثال: کنيد. Update C Set Units = 4 Where Cid Not in (Select Cid from STC) نمر اضاف کنيد. 1 را OS دانشجويان در درس 10 نمرات کمتر از مثال: Update STC Set mark = mark+1 Where mark<10 and Cid in (Select Cid from C where Cname= OS )
دستور Delete کار اين دستور حذف رکورداي مورد نظر از يک جدول است. شرط Where نام جدول Delete from تمام رکوردايي ک شرط را دارند حذف مي شوند. S Id Name Family Field 01448 01448 01448 Ali Reza Hassan Ahmadi Rezaei Hasani Computer Math Chemistry Computer را از ليست حذف کند. Delete from S Where field = computer مثال: دستوري ک دانشجويان رشت چند مثال: )جدول نمرات( مثال: دروسي را ک تاکنون اخذ نشد اند از ليست دروس حذف کنيد. Delete from C Where Cid Not in (Select Cid from STC) مثال: دانشجوياني را ک تاکنون بيش از 10 بار افتاد اند را از ليست حذف کنيد. Delete from S Where Sid in (Select Sid from STC where mark<10 group by Sid Having Count(mark)>10 ) دستورات :DCL دستورات DCL دست سوم دستورات SQL ستند ک امکان برقراري کنترلاي امنيتي را روي داد ا فرام مي کنند. ممترين دستورات DCL در SQL دو دستور GRANT و REVOKE ستند.
مي توان مجوز عمليات دلخواي را روي GRANT دستور :GRANT با استفاد از دستور داد اي خاصي ب يک يا چند کاربر اعطا کرد. GRANT operations ON datasource TO users [With Grant Option] و مچنين بازيابي تنا S مثال: دستور زير مجوز عمليات حذف از جدول John و Ali ستوناي نام و نام خانوادگي از اين جدول را ب دو کاربر اعطا مي کند. GRANT Delete, Select(Name, Family) ON S TO Ali, John With grant option اختياري است. اضاف Grant در پايان دستور With Grant Option نوشتن عبارت اجاز مي دد ک مجوزاي John و Ali کردن اين عبارت ب مثال باال ب دريافتي را بتوانند ب ديگران م بدند. مجوزي ک براي انجام عملياتي روي يک جدول ب يک کاربر داد مي شود مي تواند محدود ب بخشي از داد اي جدول )بخشي از رکوردا( باشد. مثال: دستور زير مجوز بازيابي )مشاد( تنا رکورداي مربوط ب دانشجويان رشت کامپيوتر را ب Ali مي دد. GRANT Select ON S Where Field= 'Computer' TO Ali S سوال: فرض کنيد يک View روي جدول بصورت زير تعريف شد باشد: CREATE View V as Select * from S where Field='Computer' داد باشيم: Ali را ب View مچنين فرض کنيد مجوز خواندن از اين مجاز خواد بود ليست دانشجويان کامپيوتر را ببيند( GRANT Select ON V TO Ali Ali )يعني صادر Ali حال اين سوال مطرح است ک آيا دستور زير مي تواند توسط شود Ali: Select * from S where Field='Computer' درخواست غير مجازي ندارد. او قصد بازيابي Ali جواب: بظار بنظر مي ايد ک ليست دانشجويان کامپيوتر را دارد ک ب او مجوز اين کار را داد رد مي شود. دليل آن است ک مجوز DBMS ايم. اما اين درخواست از سوي تنا مجاز ب S. پس داد شد ن روي Ali ب V روي Select عمليات S. است ن از V خواندن از
دستور :REVOKE کار اين دستور پس گرفتن مجوز عملياتي خاص از يک يا چند کاربر مي باشد. REVOKE operations ON datasource FROM users [Restrict/Cascade] بازپس مي گيرد. REVOKE Delete ON S FROM ALI Ali را از S مثال: دستور زير مجوز عمالت حذف از جدول در ارتباط با مثال فوق ممکن است Ali در زماني ک اين مجوز را داشت آنرا ب کاربران ديگري م اعطا کرد باشد و چ بسا ب مين ترتيب بطور زنجيري کاربران ديگري اين مجوز را گرفت باشند. اگر بخوايم زمان پس گرفتن مجوز از Ali بخوايم بطور زنجيري )آبشاري( اين مجوز از آن افراد م گرفت شود بايستي در پايان دستور Revoke از کلم کليدي Cascade استفاد کرد. در غير اينصورت مي توان کلم Restrict را بکار برد و يا اينک يچکدام از اين دو کلم را ننوشت. )01 پرسشای چارگزين ای كدام يك از عبارات زير نا درست است )مندسي IT _دولتي 1( استفاد از Correlated Query بجاي Join موجب پائين آمدن كارايي )Performance( مي شود. 5( ر Query ك قابل بيان بصورت يك Natural Join مي باشد مي تواند بصورت يك Subquery نيز بيان شود. 8( ر Query ك قابل بيان بصورت يك Subquery مي باشد مي تواند بصورت يكJoin Equi نيز بيان شود. 4( ر Query ك قابل بيان بصورت يكJoin Equi مي باشد مي تواند بصورت يك Natural Join نيز بيان شود. 01( IT _دولتي )مندسي پرس و جوي ذيل در يك پايگا داد مطرح است :» «اسامي كارمنداني ك مدير پروژ نيز مي باشند را ليست نماييد است نادرست كدام يك از عبارات ذيل براي فرمول كردن پرس و جوي فوق SELECT ename FROM Emps e WHERE SOME )1 Projs p SATLSFIES p.pmgr = e.empno SELECT ename FROM Emps e WHERE )5
ONE Projs p SATLSFIES p.pmgr = e.empno SELECT ename FROM Emps e WHERE e.empno = )8 ANY( SELECT p.pmgr FROM Projs p) )4 SELECT ename WHERE exists( SELECT * FROM Projs p WHERE p.pmgr = e.empno) روش مناسب براي تعريف محدوديت اي حامعيتي عمومي در SQL )مندسي IT _دولتي 01( چيست Create Domain Triggered Procedure )5 )4 Create Table Create Assertion )1 )8 درمورد عبارات SQL زير كدام يك از گزين ا صحيح است )كارشناسي ارشد _ دولتي 01( Select avg ( balance ) from account where branch name ="melli" الف- ب- Select branch-name avg ( balance ) from account group by branch-name having avg ( balance ) > 1222 ج- Select branch-name from branch where assents > ANY ( select assets from branch where brach city)='isfahan' 1( فقط عبارت )الف( صحيح مي باشد. 5( فقط عبارات )الف( )ب( صحيح مي باشند. 8( ر س عبارت )الف( )ب( و)ج( صحيح ستند. 4( الاقل يكي از عبارات )الف( )ب( )ج( غلط مي باشد. كدام يك از عبارات زير با بقي عبارات معادل نمي باشد )كارشناسي ارشد _ دولتي 01( Select P.* From part P )1
Where p.p# in ( select SP.P# from supply SP where SP.charge > 40000) Select P.* From part p Where P.P# = ALL ( select S>P# from supply S where S.charge > 40000) Select P.* From part P Where Exists ( select * from supply SP where P>P# = SP.charge > 40000) Select P.* From part P Where P.P# = (select SP.P# from supply SP where P.P# = SP.P# and SP.charge > 40000) )5 )8 )4 پايگا داد اي با دستورات زير ايجاد شد است : )01 )مندسي IT _دولتي CREATE TABLE Books( isbn CHAR(22) PRIMARYKEY, bname CHAR(12), type CHAR(2) CHECK ( typein('technical','fiction','self-help')) ); CREATE TABLE Authos( Ssn CHAR(2), isbn CHAR(22) PRIMARYKEY(ssn,isbn) ); SELECT ssn FROM Authors EXCEPT (SELECT ssn FROM Authors A, Books B WHERE A.isbn = B.isbn AND B.type='fiction') SELECT ssn FROM Authors, Books WHERE Authors.isbn = Books.isbn AND type <> 'fiction' SELECT ssn FROM Authors A WHERE NOT EXISTS (SELECT * )1 )5 )8
FROM Books B WHERE A.isbn = B.isbn AND B.type ='fiction' SELECT ssn FROM Authors WHERE ssn NOT IN (SELECT ssn FROM Authors A,Books B WHERE A.isbn =B.isbn AND B.type ='fiction' )4 باشد ك ب صورت زير مجموع سطري و ستوني View يك V فرض كنيد تعريف شد است. براي R ) از پاي اي Subset( Row and Column محاز باشد كداميك از محدوديتاي V انك رگون تغيير ) Update (روي زير كافي است 83( )كارشناسي ارشد _ دولتي Null در R باشد. R باشد. بايستي شامل كليد اصلي R باشد. بايستي شامل تمام خصيص اي )Attributes( غير بايستي شامل سطراي تكراري نباشد. بايستي يك نامزد كليدي Key( )Candidate V V V V )1 )5 )8 )4 اگر ( R(A,B,C,D ديد )View( زير تعريف شود كداميك از گزار ا درست است )كارشناسي ارشد _ دولتي 82( Create View V(A,B,C) As select A,B,sum(D) From R Group By A,B; از اين ديد )View( مي تواند عمليات ذخير سازي انجام داد. از اين ديد )View( نمي تواند عمليات ذخير سازي انجام داد. از اين ديد )View( مي توان عمليات ذخير سازي انجام داد ولي عوارض نا مطلوب دارد. از اين ديد )View( مي توان عمليات ذخير سازي انجام داد ولي استقالل داد يي تضعيف مي شود. )1 )5 )8 )4 اگر ساعت ا )Watches( ب طريق زير تعريف شد باشد : )مندسي IT _دولتي 01( CREATE TABLE Watches ( name char (32), Manf char (32) References Manfs(name))
براي آنك دستور DML شد الزم است زير را اجرا كنيم كدام يك از دسترسي اي ذكر INSERT INTO Watches VALUES ( Tissot, 'swatch'); SELECT ON Watches REFERENCES ON Manfs )5 )4 SELECT ON Manfs UPDATE ON Watches )1 )8 father_no( )no, name, شامل شمار شناسايي و نام افراد و نيز شمار شناسائي پدر آنا است. كدام گزين نام م پدراي موجود در را مي دد )كارشناسي ارشد _ دولتي 81( Select name From Person Where no = father_no; Select p1.name From Person P1, Person P5 Where P1.father_no = P5.father_no; Select name From Person Where name IN( select name from Person where no = father_no); Select P1.name From Person P1, Person P5 Where P1.no = P5.father_no; )1 )5 )8 )4 جدول A داراي ستون Price و Pcode صحيح است )كارشناسي ارشد _ دولتي 81( است.كدام گزين در مورد عبارت زير Select Pcode, Price From A Where Price = Max(Price); Select Pcode, Price From A 1( معادل عبارت مقابل است : Where Price =(select Max(Price) from A); 5( اشكال منطقي دارد زيرا محاسب ماكزيمم در مرحل جداگان اي انجام نمي شود. 8( موار يك سطر چاپ مي كند ك غلط است. 4( معادل عبارت مقابل است : Select Pcode, Max(Price)
From A Where Max(Price) = ( select Price from A); )02 جداول زير براي يك بانك مفروض است: )كارشناسي ارشد _ دولتي ADDRESS) CUSTOMER (CUSTNAME, مشتري CUSTNAME) ACCOUNTحساب (ACCNO, LOAN(LOANNO, CUSTNAME) زير براي مشترياني ك وام نگرفت اند كافي است SELECT * FROM CUSTOMER, LOAN WHERE CUSTOMER.CUSTNAME < > LOAN.CUSTNAME SELECT * FROM CUSTOMER, LOAN WHERE CUSTOMER.CUSTNAME = LOAN.CUSTNAME SELECT * FROM CUSTOMER WHERE CUSTNAME NOT IN (SELECT CUSTNAME FROM LOAN) كدام دستور SQL )1 )5 )8 4( يچكدام ضد نيم اتصال دو R و S بنابر تعريف شامل تاپل اي آويزان R مي شود.ب اين معنا ك تاپلايي ك متناظري در S و مچنين در يچ ديگري ندارند. روابط R(A,B,C) و S(A,B,D) را در نظر بگيرد ك بر اساس صفات مشترك A و B متصل مي شوند و فرض كنيد ك <A,B> كليدي براي ر دو مي باشد. كدا م گزين يك ضد نيم اتصال را بطور صحيح پياد مي كند )مندسي IT _دولتي 01( select R.* from R,S whre R.A < > S.A AND R.B < > S.B Select * from R where not exists ( select * from S where S.A = R.A OR S.B = R.B) Select * from R where not exists ( select * from S where S.A = R.A AND S.B = R.B) Select * from R where A < > any (select A from S) AND B < > any (Select B from S) )1 )5 )8 )4
و 8 نام ملوان ائي ك م «بانك زير كدام گزين پاسخ پرس و جوي در» ا را رزرو كرد اند قايق 01( مي باشد )كارشناسي ارشد _ دولتي ملوان ) age Sailor (sid, sname, rating, قايق ) color Boats ( bid, bname, رزرو ) day Reserves ( sid, bid, )1 Select S.name from sailor S where not exists (( select B.bid from Boats B) EXCEPT (Select R.bid from Reserves R) AND S.sid ) )5 Select S.name from sailor S where not exists ( select B.bid from Boats B where not exists (Select R.bid from Reserves R where R.bid =B.bid and R.sid = S.sid)) 8( موارد 5 و 1 4 (يچكدام كداميك از موارد زير در با يك DBMS مثلINGRES (مصداق مي كند )كارشناسي ارشد _ آزاد 81( ربط اي ( خود را بصورت بين )OPTIMIZED( ب QUERY 1( كاربر مي بايست خود را ب ر صورت ك مي خواد QUERY سيستم وارد كند. 5( كاربر بايد بتواند فرمول ب سيستم وارد كند. بر اساس متداي دستيابي ( ACCESS QUERY 8( استراتژي اجراي يك )METHODS تعريف شد روي اي پاي سيستم تعيين و ب اجرا گذاشت مي شود. 5 )4 توليد كنند S(S#,City,Status) مفروض است.براي بازيابي Status و #S مربوط ب توليد كنندگان شر كرمان بر اساس ترتيب نزولي Status كدام يك از تستورات SQL زير صحيح مي باشد )كارشناسي ارشد _ دولتي 81( where Select S#, Status Select #, Status From S )1 )5 City = 'Kernam' Where City = 'Kernam' From S
Order By Status Desc; Order By Status; Select Status, S# )8 Order by Status )4 Where City = 'Kernam' From S Order By Status Desc Select Status, S# From S Where City ='Kernam' در بانك اطالعاتي اي مفروض است R'(A,B,C',D') و R(A,B,C,D) دو را ب شكل زير تعريف مي كنيم : RR' و ديدگا )View( ب نام 81( )كارشناسي ارشد _ دولتي Create Vies RR' As ( Select A,B from R) Union ( Select A,B from R') )5 كدام گزين با تعريف فوق صادق است RR'(C',D',C,D) )1 RR'( A,B,A,B) RR'(A,B) )8 RR'(C',c) )4 بافرض داشتن پايگا داد اي زير: CITY) : S(S#, SNAME, STATUS, تي كنند COLOR,WEIGHT,CITY) : P(p#, PNAME, قطع,CITY) : J(J#,JNAME پروژ SPJ : (S#,P#,J#,QTY) روي پاسخگويي زير ار در SQL در نظر مي گيريم: SELECT DISTINCT P# FROM SPJ SPJX WHERE NOT EXISTS (SELECT * FROM J WHERE CITY ='C2' AND NOT EXISTS (SELECT *
FROM SPJ SPJY WHERE SPJY.P# = SPJX.P# AND SPJY.J# = J.J#)) اين روي پاسخگو پاسخ كدام پرسو جو راب دست مي آورد )كارشناسي ارشد _ دولتي 82( تي C5 1( شمار قطعاتي را بيابيد ك برا ي تمام پروژ اي شر شد است. تي C5 5( شمار قطعاتي رابيابيد ك براي تمام پروژ اي شر نشد باشند. تي شد C5 8( شمار قطعاتي رابيابيد ك اقأل براي يك پروژ شر باشند. تي نشد C5 4( شمار قطعاتي را بيابيد ك براي يچ پروژ شر باشند. اگر داشت باشيم : )حقوق : Salary و واحد : dept و نام كارمند : empname و شمار كارمند: employee )empno آنگا پاسخ پرسو جوي زير كدام گزين مي باشد )كارشناسي ارشد _ دولتي 03( پرسو جو : نام حقوق كارمنداني ك متوسط حقوقشان از متوسط حقوق واحدشان كمتر ولي از متوسط حقوق كل كاركنان سازمان بيشتر است. Select empname, salary From employee Group By dept having salary > avg ( salary ) Select empname, salary From employee Having salary > select avg ( salary ) from employee Select empname, salary From ( select * from employee where salary > ( select avg ( salary ) from employee)) Group By dept Having salary < avg ( salary ); Select empname salary From employee where salary > avg ( salary ) Group By dept Having salary > avg ( salary ) )1 )5 )8 )4 با توج ب جدول employee مي د در سؤال باال دستور زير چ كاري انجا م
)كارشناسي ارشد _ دولتي 03( Grant select, update ( empno, empname ) on employee to Roya 1( اين دستور مشكل ساختاري دارد. 5( اجاز ب روز در آوردن و نيز انتخاب ستون اي جدول employee راب ب Roya مي دد. 8( اجاز ب روز در آوردن و نيز انتخاب ستون اي جدول را از Roya پس مي گيرد. 4( اجاز ب روز در آوردن empname و empno و نيز انتخاب ستون اي جدول را ب Roya مي دد. در صورتي ك مفوم SPJ<S#,P#,J#,QTY> ب شكل ذيل بيان گردد : «تي كنند #S قطع #P را براي پروژ ب تعداد QTY تي نمود است» وكليد اصلي S#,P#,J# باشد : براي فرمول كردن پرس و جوي زير ب زبان SQL كدام قسمت تكميلي بايد ب دستور SQL زير ملحق شود )مندسي IT _دولتي 03( پرس وجو : دستور : SQL شمار پروژ ايي را معين كنيد ك تمام Select J# قطعات آنا را يك تي كنند تي كرد باشد. #S Group by Having Count ( * ) = 1; from SPJ... Group by P# P#, Having Count ( * ) = 1; Group by J#,P# Having Coutn (S#) = 1; Group by J# Having Count ( Distinct S# ) = 1; )1 )5 )8 )4 goods (P#, Pname, Price) IT _دولتي 03( جدول محصول ب صورت زير مفروض است : خروجي دستور زير كدام گزين است )مندسي Select Prince from goods Where Price >= Max(Price); 5 (كل جدول 4( ماكزيمم قيمت در جدول Null )1 8( بستگي ب داد ا دارد )03 كدام يك از گزين ا نا درست است )مندسي IT _دولتي
1( قانون اول و دوم جامعيت داد اي بوسيل تعريف دامن )domain( براي ويژگي ا قابل انجام است. 5( براي اعمال قانون اول جامعيت داد اي در SQL كافي است در تعريف ويژگي ك بعنوان كليد اصلي است not null و unique قيد شود. 8( براي اعمال قانون اول جامعيت داد اي در SQL مي بايست در ايجاد جدول كليد اصلي بوسيل primary key تعريف شود. 4( براي اعمال قانون دوم جامعيت داد اي در SQL مي بايست در ايجاد جدول كليد خارجي بوسيل foreign key تعريف شود. نام empano شمار كارمند : employee(empno,empname,dept,salary) اگر )salary باشد آنگا جواب پرسش وحقوق : واحد dept: كارمند: empname زير كدام يك از 03( IT _دولتي گزين ا مي باشد )مندسي Select * From employee Where salary > avg ( salary ); Select * From employee Having salary > avg ( salary ) ; Select * From employee Where salary > ( select avg ( salary ) from employee ) Select * From employee Group By dept Having salary > avg ( salary ) ; )1 )5 )8 )4 زير در بانك اطالعاتي SQL دستور كند 06( IT _دولتي )مندسي توليد كنندگان و قطعات چ كار مي UPDATE P SET COLOR = 'Orange' WHERE COLOR = 'Red' 1( تمام قطعات قرمز رنگ را ب رنگ نارنجي در مي آورد. 5( تمام قطعات نارنجي را ب رنگ قرمز در مي آورد. 8( اولين قطع قرمز رنگ را ب رنگ نارنجي در مي آورد. 4( آخرين قطع قرمز رنگ را ب رنگ نارنجي در مي آورد.
در بانك اطالعاتي توليد كنندگان و قطعات دستور SQL )مندسي IT _دولتي 06( زير باعث: CREATE VIEW LONDONSUP AS SELECT * FROM S WHERE CITY = 'LONDON' 1( افزايش سرعت پاسخگويي ب برخي از پرس و جوا مي شود. 5( خطاي زمان اجرا مي شود. 8( خطاي نحوي ( )Syntax مي شود. 4( سولت بيان برخي از پرس و جوا مي شود. كدام دستور با معناي داد شد در SQL )06 وجود ندارد )مندسي IT _دولتي براي ازبين بردن جداول 4( Update براي تغيير Delete )5 View براي تغيير Update )1 8( Revoke براي لغو اجاز دسترسي جداول پاي اگر اي S(S#,SNAME,STATUS,CITY) و SP(S#,P#,QTY) مفروض باشد معادل پرسش زير كدام يك مي باشد )مندسي IT _دولتي 06( SELECT SNAME, CITY FROM S WHERE S# IN ( SELECT S# FROM SP WHERE P# = 'P1') SELECT SNAME, CITY FROM S WHERE S# = ANY ( SELECT S# FROM SP WHERE P# = 'P1') SELECT SNAME, CITY FROM S WHERE EXISTS ( SELECT * FROM SP WHERE SP.P# = 'P1' AND SP.S#=S.S#) SELECT SNAME, CITY FROM S, SP WHERE S.S# = SP.S# AND SP.P# = 'P1' 2( رس معادل مي باشند. )1 )5 )8
دو جدول x و y مفروض ستند در صورت اجراي دستور SQL كارديناليتي جدول حاصل كدام است )مندسي IT _آزاد 01( زير x F f1 f5 B b1 b5 y A B C a1 a5 b1 b4 MK MTK a1 b5 LN a5 b1 RP Select * From y Right outer join x ON y.b=x.b Where y.c Like 'M%'; 8 )4 4 )8 1 )5 5 )1 **************************************************************** است : ب صورت زير وg L و S پايگا داد اي داراي س جدول S(S#, Sname), L(L#, Lname), G(S#,L#,Mark) جدول دانشجو با خصيص اي شمار دانشجويي و نام S ك در آن جدول G جدول درس با خصيص اي شمار و نام درس و جدول L دانشجو.جدول نمر با خصيص اي شمار دانشجويي شمار درس و نمر درس است با سؤال بعدي پاسخ ديد. 2 داد ب توج ب اين پايگا **************************************************************** با توج ب جدول پايگا داد فوق خروجي دستور SQL )مندسي IT _آزاد 06( زير كدام است SELECT DISTINCT Sname FROM S WHERE NOT EXISTS ( SELECT S# FROM G WHERE L#='e1 ' نمر دارند. نمر e1 نمر حداكثر يك 1( نام تمام دانشجوياني را مشخص مي كند ك از درس e1 5( نام بعضي از دانشجوياني را مشخص مي كند ك از درس ندارند. e1 e1 8( نام تمام دانشجوياني را مشخص مي كند ك از درس ندارند. 4( نام تمام دانشجوياني را مشخص مي كند ك از درس نمر دارند.
با توج ب جدول پايگا داد سؤال قبلي پرس و جوي عبارت SQL زير كدام است )مندسي IT _آزاد 06( SELECT DISTINCT S# FROM G WHERE Mark = ( SELECT MAX ( Mark ) FROM G) 1( شمار دانشجوياني را مشخص مي كند ك بيشترين نمر را اخذ نمود اند. 5( شمار بعضي از دانشجوياني را مشخص مي كند ك بيشترين نمر را اخذ نمود اند. 8( شمار دانشجوياني را مشخص مي كند ك نمر بيشتري اخذ نمود است. 4( اين دستور مشكل گرامري دارد. SELECT State, COUNT ( State ) FROM Customer_T GROUP BY State HAVING COUNT ( State ) >1 )06 در عبارت : )مندسي IT _آزاد 1( مي توانيم از يك Subquery استفاد كنيم. 5( مي توانيم از WHERE بجاي HAVING استفاد كنيم. 8( مي توانيم شرط < 10 ) (State COUNT را با شرطي فعلي تركيب كنيم. )4 مي توانيم از ) * ( COUNT بجاي ) State COUNT ( استفاد كنيم.